#ifndef _MI_EVENT_H_
#define _MI_EVENT_H_

#include "collaboration.h"
#include "event.h"

#define MI_EVENT_TYPE 555

/**
* Enumeracion de los tipos de eventos de metainformacion posibles
*/
typedef enum __MIEventType
{
	LOGIN, DISCONNECT,
	USER_CHANGE,
	ROLE_CHANGE,
	PERMISSIONS_CHANGE,
	NEW_ALLOWED_ROLE,
	REMOVE_ALLOWED_ROLE,
	COMPONENT_PERMISSIONS_CHANGE,
	USER_COMPONENT_PERMISSIONS_CHANGE,
	ROLE_COMPONENT_PERMISSIONS_CHANGE,
	SYNCHRONIZATION,
	USER_ROLE_CHANGED,
	NEW_USER,
	NEW_ROLE,
	REMOVE_USER,
	REMOVE_ROLE
} MIEventType;

/**
* @brief Eventos de metainformacion del sistema
* @author Carlos Rodriguez Dominguez
*
* Modela los eventos de metainformacion del sistema.
* Tiene un campo llamado "mi_type" que contiene el tipo
* de evento de metainformacion especifico. El campo "type"
* sera puesto al valor definido por MI_EVENT_TYPE.
*/
class MIEvent : public Event {
public:
	/**
	* Constructor por defecto
	*/
	MIEvent(const Ice::CommunicatorPtr& c);
	
	/**
	* Destructor
	*/
	virtual ~MIEvent();
	
	/**
	* Obtiene el tipo del evento de metainformacion
	*
	* @return Tipo del evento de metainformacion de entre
	*         los disponibles en @see MIEventType.
	*/
	int getSubType();
};

#endif
